import requests

from contant.gaode import *


class GaodeFenceService:
    @classmethod
    def add_circle_fence(cls, sid: str, name: str, desc: str, center: str, radius: str):
        """
        新增圆形围栏
        :param sid: 服务编号
        :param name: 围栏名称
        :param desc: 围栏描述
        :param center: 围栏中心点坐标
        :param radius: 围栏半径 单位：米，整数，取值范[1,50000]
        :return: 接口调用结果
        """
        post_data = {
            'key': GAODE_KEY,
            'sid': sid,
            'name': name,
            'desc': desc,
            'center': center,
            'radius': radius
        }
        # 发送HTTP请求
        response = requests.post(GAODE_FENCE_CIRCLE_ADD, data=post_data)
        # 解析JSON响应
        data = response.json()
        return data

    @classmethod
    def add_polygon_fence(cls, sid: str, name: str, desc: str, points: str):
        """
        新增多边形围栏
        :param sid: 服务编号
        :param name: 围栏名称
        :param desc: 围栏描述
        :param points: 多边形顶点坐标 坐标格式（X1,Y1;X2,Y2;...） 顶点顺序可按顺时针或逆时针排列；
        :return: 接口调用结果
        """
        post_data = {
            'key': GAODE_KEY,
            'sid': sid,
            'name': name,
            'desc': desc,
            'points': points
        }
        # 发送HTTP请求
        response = requests.post(GAODE_FENCE_POLYGON_ADD, data=post_data)
        # 解析JSON响应
        data = response.json()
        return data

    @classmethod
    def add_polyline_fence(cls, sid: str, name: str, desc: str, points: str, bufferradius: int):
        """
        新增线形围栏
        :param sid: 服务编号
        :param name: 围栏名称
        :param desc: 围栏描述
        :param points: 多边形顶点坐标 格式（X1,Y1;X2,Y2;...） 线路总长度<500KM，坐标点个数取值范围 [2，100]
        :param bufferradius: 沿线偏移距离 单位：米 取值范围 [1，300]；
        :return: 接口调用结果
        """
        post_data = {
            'key': GAODE_KEY,
            'sid': sid,
            'name': name,
            'desc': desc,
            'points': points,
            'bufferradius': bufferradius
        }
        # 发送HTTP请求
        response = requests.post(GAODE_FENCE_POLYLINE_ADD, data=post_data)
        # 解析JSON响应
        data = response.json()
        return data

    @classmethod
    def add_district_fence(cls, sid: str, name: str, desc: str, adcode: str):
        """
        新增行政区划围栏
        :param sid: 服务编号
        :param name: 围栏名称
        :param desc: 围栏描述
        :param adcode: 行政区划编码
        :return: 接口调用结果
        """
        post_data = {
            'key': GAODE_KEY,
            'sid': sid,
            'name': name,
            'desc': desc,
            'adcode': adcode
        }

        # 发送HTTP请求
        response = requests.post(GAODE_FENCE_DISTRICT_ADD, data=post_data)
        # 解析JSON响应
        data = response.json()
        return data

    @classmethod
    def update_circle_fence(cls, sid: str, gfid: str, name: str, desc: str, center: str, radius: str):
        """
        新增圆形围栏
        :param sid: 服务编号
        :param gfid: 围栏编码
        :param name: 围栏名称
        :param desc: 围栏描述
        :param center: 围栏中心点坐标
        :param radius: 围栏半径 单位：米，整数，取值范[1,50000]
        :return: 接口调用结果
        """
        post_data = {
            'key': GAODE_KEY,
            'sid': sid,
            'gfid': gfid,
            'name': name,
            'desc': desc,
            'center': center,
            'radius': radius
        }
        # 发送HTTP请求
        response = requests.post(GAODE_FENCE_CIRCLE_UPDATE, data=post_data)
        # 解析JSON响应
        data = response.json()
        return data

    @classmethod
    def update_polygon_fence(cls, sid: str, gfid: str, name: str, desc: str, points: str):
        """
        新增多边形围栏
        :param sid: 服务编号
        :param gfid: 围栏编码
        :param name: 围栏名称
        :param desc: 围栏描述
        :param points: 多边形顶点坐标 坐标格式（X1,Y1;X2,Y2;...） 顶点顺序可按顺时针或逆时针排列；
        :return: 接口调用结果
        """
        post_data = {
            'key': GAODE_KEY,
            'sid': sid,
            'gfid': gfid,
            'name': name,
            'desc': desc,
            'points': points
        }
        # 发送HTTP请求
        response = requests.post(GAODE_FENCE_POLYGON_UPDATE, data=post_data)
        # 解析JSON响应
        data = response.json()
        return data

    @classmethod
    def update_polyline_fence(cls, sid: str, gfid: str, name: str, desc: str, points: str, bufferradius: int):
        """
        新增线形围栏
        :param sid: 服务编号
        :param gfid: 围栏编码
        :param name: 围栏名称
        :param desc: 围栏描述
        :param points: 多边形顶点坐标 格式（X1,Y1;X2,Y2;...） 线路总长度<500KM，坐标点个数取值范围 [2，100]
        :param bufferradius: 沿线偏移距离 单位：米 取值范围 [1，300]；
        :return: 接口调用结果
        """
        post_data = {
            'key': GAODE_KEY,
            'sid': sid,
            'gfid': gfid,
            'name': name,
            'desc': desc,
            'points': points,
            'bufferradius': bufferradius
        }
        # 发送HTTP请求
        response = requests.post(GAODE_FENCE_POLYLINE_UPDATE, data=post_data)
        # 解析JSON响应
        data = response.json()
        return data

    @classmethod
    def update_district_fence(cls, sid: str, gfid: str, name: str, desc: str, adcode: str):
        """
        新增行政区划围栏
        :param sid: 服务编号
        :param gfid: 围栏编码
        :param name: 围栏名称
        :param desc: 围栏描述
        :param adcode: 行政区划编码
        :return: 接口调用结果
        """
        post_data = {
            'key': GAODE_KEY,
            'sid': sid,
            'gfid': gfid,
            'name': name,
            'desc': desc,
            'adcode': adcode
        }

        # 发送HTTP请求
        response = requests.post(GAODE_FENCE_DISTRICT_UPDATE, data=post_data)
        # 解析JSON响应
        data = response.json()
        return data

    @classmethod
    def delete_fence(cls, sid: str, gfids: str):
        """
        删除围栏
        :param sid: 服务编号
        :param gfids: 围栏编码 1.支持一次传入多个，以","分割；单次最多支持100个，如超出将只截取前100个作为输入； 2.可以传入 "#all" 删除所有。
        :return: 接口调用结果
        """
        post_data = {
            'key': GAODE_KEY,
            'sid': sid,
            'gfids': gfids
        }
        # 发送HTTP请求
        response = requests.post(GAODE_FENCE_DELETE, data=post_data)
        # 解析JSON响应
        data = response.json()
        return data

    @classmethod
    def query_fence(cls, sid: str):
        """
        查询围栏
        :param sid: 服务编号
        :return: 接口调用结果
        """
        post_data = {
            'key': GAODE_KEY,
            'sid': sid
        }
        # 发送HTTP请求
        response = requests.get(GAODE_FENCE_LIST, params=post_data)
        # 解析JSON响应
        data = response.json()
        return data
